iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0

前言

上一篇簡單介紹 TensorBoard 的功能,並且測試以下功能:

  1. 追蹤損失和準確率等效能衡量指標(Metrics)。
  2. 將圖片寫入 Log。

這次,我們要測試其他功能:

  1. 直方圖(histogram):顯示訓練過程中的權重(weights)、偏差(bias)分佈。
  2. 效能調校(Performance Tuning)。
  3. 敏感度分析(What-If Tool, WIT)。

詞嵌入(Word Embedding) 也是一個很好玩的工具,不過它屬於自然語言處理的一部份,我們之後有機會再介紹。

直方圖(histogram)

要顯示訓練過程中的權重(weights)、偏差(bias)分佈,非常簡單,只要在定義 tensorboard callback時加一參數即可,histogram_freq=1 表示每一個執行週期(epoch)統計1次直方圖。

tensorboard_callback = [tf.keras.callbacks.TensorBoard(log_dir='.\\logs', histogram_freq=1)]

點選【histograms】頁籤,顯示如下,越近的分佈為最後訓練的結果。
https://ithelp.ithome.com.tw/upload/images/20200909/20001976eqpDyB8zLY.png

程式名稱為07_01_Callback.ipynb。

效能調校(Performance Tuning)

與GridSearchCV類似,設定多個參數組合,如下:

# 參數組合
from tensorboard.plugins.hparams import api as hp

HP_NUM_UNITS = hp.HParam('num_units', hp.Discrete([16, 32]))
HP_DROPOUT = hp.HParam('dropout', hp.RealInterval(0.1, 0.2))
HP_OPTIMIZER = hp.HParam('optimizer', hp.Discrete(['adam', 'sgd']))

依每一參數組合逐一執行訓練。

session_num = 0

for num_units in HP_NUM_UNITS.domain.values:
    for dropout_rate in (HP_DROPOUT.domain.min_value, HP_DROPOUT.domain.max_value):
        for optimizer in HP_OPTIMIZER.domain.values:
            hparams = {
                    HP_NUM_UNITS: num_units,
                    HP_DROPOUT: dropout_rate,
                    HP_OPTIMIZER: optimizer,
            }
            run_name = "run-%d" % session_num
            print('--- Starting trial: %s' % run_name)
            print({h.name: hparams[h] for h in hparams})
            run('logs/hparam_tuning/' + run_name, hparams)
            session_num += 1

點選【hparams】頁籤,顯示如下,第6回合準確率最佳。
https://ithelp.ithome.com.tw/upload/images/20200909/20001976XHqWh6dmy9.png

詳細資訊如下:
https://ithelp.ithome.com.tw/upload/images/20200909/20001976IV919Tb3K8.png

從下圖粗紅線可以找到最佳參數:

  1. dropout rate=0.2
  2. 輸出神經元數(num_units)=32
  3. 優化器(optimizer)=adam
    獲得最佳準確度 0.9775。

https://ithelp.ithome.com.tw/upload/images/20200909/20001976ilwHvlX7X8.png

程式名稱為08_02_TensorBoard_Tuning.ipynb。

敏感度分析(What-If Tool, WIT)

WIT 能幫助我們更了解分類(classification)與迴歸(regression)模型,它擁有非常強大的功能,包括:

  1. 在下圖左邊的欄位修改任一個觀察值,重新預測,可以觀察變動的影響。
    https://ithelp.ithome.com.tw/upload/images/20200909/20001976ubvamwNmPA.png
  2. 使用 partial dependence plots,可以了解個別特徵對預測結果的影響。
    https://ithelp.ithome.com.tw/upload/images/20200909/20001976uep4B0qRUU.png
  3. 切割訓練資料筆數,了解切割後對預測結果的影響。
    https://ithelp.ithome.com.tw/upload/images/20200909/20001976tXe7xJpmjq.png

詳細操作說明可參考【A Walkthrough with UCI Census Data】【範例】可在Colaboratoy環境執行,這是一個二分類的模型。

程式不涉及深度學習,筆者就沒仔細研究了。

結論

TensorBoard功能愈來愈多,可以寫成一本書了,以上我們只作了很簡單的實驗,如果需要更詳細的資訊,可以參考【官網】

本篇範例包括07_01_Callback.ipynb、08_02_TensorBoard_Tuning.ipynb、09_01_What_If_Tool_Notebook_Usage.ipynb,可自【這裡】下載。


上一篇
Day 08:TensorBoard 的初體驗
下一篇
Day 10:運用自訂Callback 追蹤訓練過程( Keras )
系列文
輕鬆掌握 Keras 及相關應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言